package com.duoduo.剑指Offer;

import com.duoduo.ListNode;

/**
 * @program: algorithm
 * @description: 反转链表04
 * 定义一个函数，输入一个链表的头节点，反转该链表并输出反转后链表的头节点。
 * <p>
 *  
 * <p>
 * 示例:
 * <p>
 * 输入: 1->2->3->4->5->NULL
 * 输出: 5->4->3->2->1->NULL
 * @author: chaidl  ！
 * @create: 2022-05-21 23:58
 */
public class 反转链表04 {
	//采用递归的解法
	public ListNode reverseList(ListNode head) {
		if (head==null ||head.next == null) {
			return head;
		}
		//result=5
		ListNode result = reverseList(head.next);
		//第一次到这里的时候应该是4
		head.next.next=head;
		head.next=null;
		return result;
	}
	//双指针
	public ListNode reverseList2(ListNode head) {
		ListNode prev=null;
		ListNode curr=head;
		while (curr != null){
			ListNode tmp = curr.next;
			curr.next=prev;
			prev=curr;
			curr=tmp;
		}
		return prev;
	}
}
